#pragma once 

#ifdef WGLENGINE_DLL
#define WGLENGINE_EXPORT __declspec(dllexport)
#else
#define WGLENGINE_EXPORT __declspec(dllimport)
#endif


#include "Camera.h"
#include "glm\\gtx\\quaternion.hpp"

class WGLENGINE_EXPORT RTSCamera : public Camera
{
public:
	RTSCamera(bool input=false);
	~RTSCamera();

	virtual glm::vec3 GetPosition() override
	{
		return position;
	}

	void ProcessInputQueue() override;

protected:
	void Update() override;
	void UpdateCameraMatrix() override;
	void UpdateCamera() override;											//!< Update Camera From MouseInput
	
private:
	//transforms of the camera
	glm::vec3 position;
	glm::vec3 up;
	glm::vec3 forward;

	//look at point of the camera, used to calculate forward vector
	glm::vec3 lookAt;
	
	float minXRot;
	float maxXRot;
	float maxYRot;
	
	float distanceToFocus;
	float zoomModifier;
	
	bool mouseMotionStarted;

	std::vector<std::shared_ptr<MouseInput>> inputBuffer;
	float xRot;
	float yRot;
};